#include "Queue.h"


// 队列的初始化
int Init_Queue(SqQueue ** Q)
{
    *Q = (SqQueue * )malloc(sizeof(SqQueue));

    if (NULL == *Q)
    {
        ERRLOG("动态空间创建失败");
        exit(EOF);
    }

    memset((*Q)->data , 0 , sizeof(Elenemt_data) * MAX_SIZE);

    (*Q)->front = (*Q)->rear = 0;

    return 0;
}

// 队列的入队
int Enqueue(SqQueue * Q, Elenemt_data data)
{
    if (NULL == Q)
    {
        ERRLOG("队列 为 NULL");
        return EOF;
    }

    if ((Q->rear + 1) % MAX_SIZE == Q->front)
    {
        ERRLOG("队列 为 满");
        return EOF;
    }

    // 入队
    Q->data[Q->rear] = data;

    // 迭代 队尾
    Q->rear = (Q->rear + 1) % 10;

    return 0;

}

// 队列的出队
int Dequeue(SqQueue * Q , Elenemt_data * data)
{
    // 判断为空
    if (Q->front == Q->rear)
    {
        ERRLOG("队列 为 空");
        return EOF;
    }

    // 出队输出数据
    if ( NULL == data )
    {
        printf("%s\t%s\t%d\t%d\t%d\n", \
               Q->data[Q->front].name, Q->data[Q->front].sex, Q->data[Q->front].age, \
               Q->data[Q->front].id, Q->data[Q->front].sco);
    }
    else
    {
        *data = Q->data[Q->front];
    }

    Q->front = (Q->front + 1) % MAX_SIZE;

    return 0;

}

// 队列的判空
int Is_Empty(SqQueue * Q)
{
    if (Q->front == Q->rear)
    {
        ERRLOG("队列 为 空");
        return EOF;
    }
    return 0;
}

// 队列的清空
void Clear_Queue(SqQueue * Q)
{
    if (NULL == Q)
    {
        ERRLOG("队列 为 NULL");
        return;
    }
    Q->front = Q->rear = 0;
}

// 队列的销毁
void Destroy_Queue(SqQueue ** Q)
{
    if (NULL == *Q)
    {
        ERRLOG("队列 为 NULL");
        return;
    }
    (*Q)->front = (*Q)->rear = 0;
    free(*Q);
    *Q = NULL;
}